import EventRoute from './EventRoute'
const routers = new Array()

import path from 'path'

import https from 'https'
import fs from 'fs'
import os from 'os'

import { screen, BrowserWindow } from 'electron'

/**
 *  
 *  下载模版
 */
routers.push(
  new EventRoute('download-http-file', 'event', (api, data = {}) => {
    let url = data.data;
    let filename = url.substring(url.lastIndexOf('/') + 1);
    https.get(url, (res) => {
      console.log(os.homedir())
      api.dialog.showSaveDialog({
        title: "请选择保存位置...",
        defaultPath: path.format({ dir: os.homedir() + "\\Downloads\\", base: filename }),
        filters: [
          { name: 'Microsoft Excel 文件', extensions: ['xlsx'] }
        ]
      }).then(result => {
        const file = fs.createWriteStream(result.filePath);
        res.pipe(file);
        file.on('finish', () => {
          file.close();
          api.dialog.showMessageBox({
            title: '提示信息',
            message: '下载完成',
            type: 'info'
          })
        }).on('error', (err) => {
          // api.dialog.showMessageBox({
          //   title: '提示信息',
          //   message: err,
          //   type: 'error'
          // })
        })
      })
    })
  })
)

/**
 *  关闭loading
 *  展示login
 */
routers.push(
  new EventRoute('hide-loading-show-main', 'event', (api, data = {}) => {
    //关闭loading窗口
    api.loadingWindow.destroy();
    setTimeout(() => {
      //显示login窗口
      api.window.show();
    }, 500)
  })
)


/**
 *  退出应用
 */
routers.push(
  new EventRoute('quit-window', 'event', (api, data = {}) => {
    api.app.quit()
  })
)

/**
 * 最大化
 */
routers.push(
  new EventRoute('max-window', 'event', (api, data = {}) => {
    api.window.maximize()
  })
)

/**
 * 最小化
 */
routers.push(
  new EventRoute('min-window', 'event', (api, data = {}) => {
    api.window.minimize()
  })
)

/**
 * 关闭窗口（不是退出应用）
 */
routers.push(
  new EventRoute('close-window', 'event', (api, data = {}) => {
    // context.listWindow.close()
    hideWindow()
  })
)

/**
 * 异步下载任务
 */

// 窗口属性
const context = {
  // 是否退出应用
  allowQuitting: false,
  isShow: false, //控制显示隐藏
  listWindow: null
}

// 显示窗口
const showWindow = () => {
  // 如果窗口存在，并且没有销毁
  if (context.listWindow && !context.listWindow.isDestroyed()) {
    context.isShow = true
    context.listWindow.show()
  }
}

// 隐藏窗口
const hideWindow = () => {
  // 如果窗口存在，并且没有销毁
  if (context.listWindow && !context.listWindow.isDestroyed()) {
    context.isShow = false
    context.listWindow.hide()
  }
}

// 创建窗口
const createListWindow = () => {
  //创建窗口
  context.listWindow = new BrowserWindow({
    width: 1200,
    height: 350,
    show: false,
    frame: false,//无边框窗口
    transparent: true,//透明背景
    hasShadow: flase,//去除阴影
    //alwaysOnTop:true,//窗口置顶
    autoHideMenuBar: true,
    ...(process.platform === 'linux'
      ? {
        icon: path.join(__dirname, '../../build/icon.png')
      }
      : {}),
    webPreferences: {
      preload: path.join(__dirname, '../preload/index.js'),
      sandbox: false
    }
  })

  //显示窗口 并且 调整位置 
  context.listWindow.on('ready-to-show', () => {
    let heihgt = screen.getPrimaryDisplay().size.height;
    context.listWindow.setBounds({
      y: heihgt - 400
    })
    context.listWindow.show();
  })

  context.isShow = true;

  //隐藏窗口
  context.listWindow.on('close', () => {
    context.listWindow.hide();
  })

  //判断当前是开发环境还是生产环境
  if (process.env['ELECTRON_RENDERER_URL']) {
    //展示的页面
    context.listWindow.loadURL(process.env['ELECTRON_RENDERER_URL'] + '/#/down')
  } else {
    context.listWindow.loadFile(path.join(__dirname, '../renderer/index.html'), {
      hash: '/down'
    })
  }
}

routers.push(
  new EventRoute('open-window-down', 'event', (api, data = {}) => {
    if (context.listWindow == null) {
      createListWindow();
    } else {
      if (context.isShow) {
        hideWindow();
      } else {
        showWindow();
      }
    }
  })
)

/**
 * 窗口拖拽
 */
routers.push(
  new EventRoute('custom-adsorption', 'event', (api, data = {}) => {
    // 边拖拽边调用
    context.listWindow.setPosition(data.data.appX, data.data.appY)
    //单独设置y：newBounds({y:''})
  })
)

/**
 * 下载(导出)
 */

routers.push(
  new EventRoute('download', 'event', (api, data = {}) => {
    let url = data.data.url
    // 向指定的 URL 发送 GET 请求，得到的响应res可以被视为一个可读流。
    https.get(url, (res) => {
      api.dialog.showSaveDialog({
        title: '下载',
        // defaultPath表示文件名。如果URL是 "https://xxx.com/path/413451667.xlsx",那么 url.substring(url.lastIndexOf('/')+1) 的结果就是 "413451667.xlsx"。
        defaultPath: url.substring(url.lastIndexOf('/') + 1)
      }).then(data => {// 点击保存后

        //console.log(data);
        // {
        //   //路径
        //   filePath:'users/zhangsan/Downloads/413451667.xlsx'
        //   canceled:false
        // }

        // 创建一个可写流，准备将数据写入本地文件。
        const file = fs.createWriteStream(data.filePath)
        // 管道
        // 使用 .pipe() 函数将响应的可读流连接到文件的可写流
        res.pipe(file)
        // 监听可写流的 'finish' 事件
        file.on('finish', () => {
          // 当所有数据都写入完成时关闭文件写入流
          file.close();
          api.dialog.showMessageBox({
            title: '提示信息',
            message: '下载完成',
            type: 'info'
          })
        }).on('error', (error) => {
          api.dialog.showMessageBox({
            title: '提示信息',
            message: error,
            type: 'error'
          })
        })

      })
    })
  })
)

/**
 *  聊天
 */
routers.push(
  new EventRoute('chat', 'event', (api, data = {}) => {
    //创建窗口
    const chat = new BrowserWindow({
      width: 1050,
      height: 700,
      show: false,
      autoHideMenuBar: true,
      ...(process.platform === 'linux'
        ? {
          icon: path.join(__dirname, '../../build/icon.png')
        }
        : {}),
      webPreferences: {
        preload: path.join(__dirname, '../preload/index.js'),
        sandbox: false
      }
    })
    //显示窗口 并且 调整位置 
    chat.on('ready-to-show', () => {
      chat.show();
    })

    //展示的页面
    if (process.env['ELECTRON_RENDERER_URL']) {//判断当前是开发环境还是生产环境
      chat.loadURL(process.env['ELECTRON_RENDERER_URL'] + '/#/chat')
    } else {
      chat.loadFile(path.join(__dirname, '../renderer/index.html'), {
        hash: '/chat'
      })
    }
  })
)

/**
 * 锁定 & 解锁
 */
routers.push(
  new EventRoute('kiosk', 'event', (api, data = {}) => {
    // let kiosk = context.listWindow.isKiosk() //检查是否锁定
    kiosk = data.kiosk
    if (kiosk) {
      context.listWindow.setKiosk(false)
    } else {
      context.listWindow.setKiosk(true)
    }
  })
)

export default routers
